//
// Created by mongobaba on 2021/6/6.
//

#include "unit_test.h"
#include "json_validator.h"

// 特殊情况
TEST(parse_character_empty) {
    bool meet_string_end = true;
    json_validator validator("");
    ASSERT_EQ(false, validator.parse_character(meet_string_end));
    ASSERT_EQ(std::string(""), validator.left());
    ASSERT_EQ(false, meet_string_end);
}

// escape
TEST(parse_character_escape) {
    bool meet_string_end = true;
    json_validator validator(R"(\tx)");
    ASSERT_EQ(true, validator.parse_character(meet_string_end));
    ASSERT_EQ(std::string("x"), validator.left());
    ASSERT_EQ(false, meet_string_end);
}

// 双引号
TEST(parse_character_quote) {
    const std::string json(R"("x)");
    bool meet_string_end = false;
    json_validator validator(json);
    ASSERT_EQ(false, validator.parse_character(meet_string_end));
    ASSERT_EQ(json, validator.left());
    ASSERT_EQ(true, meet_string_end);
}

// 普通单个字符
TEST(parse_character_single_char) {
    bool meet_string_end = true;
    json_validator validator("ab");
    ASSERT_EQ(true, validator.parse_character(meet_string_end));
    ASSERT_EQ(std::string("b"), validator.left());
    ASSERT_EQ(false, meet_string_end);
}

// 多字节
TEST(parse_character_multibyte) {
    const std::string json("中");
    bool meet_string_end = true;
    json_validator validator(json);
    ASSERT_EQ(true, validator.parse_character(meet_string_end));
    ASSERT_EQ(json.substr(1), validator.left());
    ASSERT_EQ(false, meet_string_end);
}
